Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [SDL e OpenGL] Caricamento texture e profondità di colore
Forum - C/C++ - [SDL e OpenGL] Caricamento texture e profondità di colore

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Salve a tutti.
Nel mio codice ho bisogno di caricare una texture 2D da un file bitmap.
Riesco a caricarla ma i colori sono sfalsati, credo sia dovuto alla profondità di colore.
Vorrei impostarla a 32 bit.
Esiste una funzione (come per esempio la set_color_depth() di allegro :rotfl: ) che mi permette di impostare la profondità?

Ecco il codice, anche se non credo che serva xD

Codice sorgente - presumibilmente C#

  1. void fe_frame::OpenglFramework::loadOpenglTexture(fe_frame::graphicObject* object,string filename,string extension){
  2.  fe_out<<"Loading texture"<<endl;
  3.  try{
  4.          object->image = IMG_Load(filename.c_str());
  5.          if(object->image == NULL){
  6.           string msg("Bad image : "+filename);
  7.           throw error(1,msg);
  8.         }
  9.   }catch(error err){
  10.       err.printErr();
  11.           return;
  12.         }
  13.  
  14.    try{
  15.            glGenTextures(1,&object->texture);
  16.  
  17.            if(&object->texture == NULL){
  18.              throw error(2,"Can't make texture");
  19.            }else{
  20.                  glBindTexture(GL_TEXTURE_2D,object->texture);
  21.                  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  22.                  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  23.                  SDL_SetAlpha(object->image,0,0);
  24.                
  25.                  if(extension == "PNG"){
  26.                          glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,object->image->w,object->image->h,0,
  27. GL_RGBA,GL_UNSIGNED_BYTE,object->image->pixels);
  28.                  }else{
  29.                      glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,object->image->w,object->image->h,0,
  30. GL_RGB,GL_UNSIGNED_BYTE,object->image->pixels);
  31.                  }
  32.  
  33.            }
  34.    }catch(error err){
  35.      err.printErr();
  36.          return;
  37.    }
  38.    fe_out<<"Texture loaded"<<endl;
  39.   }


Ultima modifica effettuata da il 21/11/2010 alle 16:28
PM
Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 16:54
Domenica, 21/11/2010
Ciao! Esistono diversi metodi per farlo, con i loro pro e contro. Per evitare di scrivere troppe righe di codice preferivo usare SDL_GetRGBA() e memorizzare i valori di ogni pixel in un array, piuttosto che passare direttamente i pixels caricati in memoria dalle SDL.

Ultima modifica effettuata da napco il 21/11/2010 alle 16:55
PM
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 16:53
Domenica, 21/11/2010
Prova utilizzando la SDL_DisplayFormat(surface), che ti ritorna una nuova SDL_Surface adattata al formato che stai utilizzando (in questo caso per la profondità del colore 32 bit).
Esempio:
Codice sorgente - presumibilmente Plain Text

  1. SDL_Surface *nuovaSurface = SDL_DisplayFormat(surface_da_adattare);


Ciao GuglielmoS

Ultima modifica effettuata da GuglielmoS il 21/11/2010 alle 16:58
PM
Usa i commenti per chiedere spiegazioni o ringraziare le risposte.